bitkeeper revision 1.737.2.1 (403a19687Hq5Q8vjslGwmnEJKF9-Sg)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Mon, 23 Feb 2004 15:16:56 +0000 (15:16 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Mon, 23 Feb 2004 15:16:56 +0000 (15:16 +0000)
hypervisor.h, time.c, hypervisor-if.h, kernel.c, entry.S:
  Sanitise hypercall numbering. Added a get-xen-version hypercall.

extras/mini-os/h/hypervisor.h
xen/arch/i386/entry.S
xen/common/kernel.c
xen/include/hypervisor-ifs/hypervisor-if.h
xenolinux-2.4.25-sparse/arch/xeno/kernel/time.c
xenolinux-2.4.25-sparse/include/asm-xeno/hypervisor.h

index ad11c39a452e3ebf2cf2d2d4fce4ec613c35278b..c0f927594569366ce1a3a9eda1f767977f938927 100644 (file)
@@ -176,12 +176,12 @@ static __inline__ int HYPERVISOR_stop(unsigned long srec)
     return ret;
 }
 
-static __inline__ long HYPERVISOR_set_dom_timer(void *timer_arg)
+static __inline__ long HYPERVISOR_set_timer_op(void *timer_arg)
 {
     int ret;
     __asm__ __volatile__ (
         TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_dom_timer),
+        : "=a" (ret) : "0" (__HYPERVISOR_set_timer_op),
         "b" (timer_arg) : "memory" );
 
     return ret;
index 4a135e5212d19c96f55bc6dae9499a809f15b4ff..c1c57ac11d796cb1d274269c11299945985f4e45 100644 (file)
@@ -704,28 +704,29 @@ nmi_io_err:
         
 .data
 ENTRY(hypervisor_call_table)
-        .long SYMBOL_NAME(do_set_trap_table)
+        .long SYMBOL_NAME(do_set_trap_table)     /*  0 */
         .long SYMBOL_NAME(do_mmu_update)
         .long SYMBOL_NAME(do_console_write)
         .long SYMBOL_NAME(do_set_gdt)
         .long SYMBOL_NAME(do_stack_switch)
-        .long SYMBOL_NAME(do_set_callbacks)
+        .long SYMBOL_NAME(do_set_callbacks)      /*  5 */
         .long SYMBOL_NAME(do_net_io_op)
         .long SYMBOL_NAME(do_fpu_taskswitch)
         .long SYMBOL_NAME(do_sched_op)
-        .long SYMBOL_NAME(do_set_timer_op)
         .long SYMBOL_NAME(do_dom0_op)
-        .long SYMBOL_NAME(do_network_op)
+        .long SYMBOL_NAME(do_network_op)         /* 10 */
         .long SYMBOL_NAME(do_block_io_op)
         .long SYMBOL_NAME(do_set_debugreg)
         .long SYMBOL_NAME(do_get_debugreg)
         .long SYMBOL_NAME(do_update_descriptor)
-        .long SYMBOL_NAME(do_set_fast_trap)
+        .long SYMBOL_NAME(do_set_fast_trap)      /* 15 */
         .long SYMBOL_NAME(do_dom_mem_op)
         .long SYMBOL_NAME(do_multicall)
         .long SYMBOL_NAME(do_kbd_op)
         .long SYMBOL_NAME(do_update_va_mapping)
+        .long SYMBOL_NAME(do_set_timer_op)       /* 20 */
         .long SYMBOL_NAME(do_event_channel_op)
+        .long SYMBOL_NAME(do_xen_version)
         .rept NR_syscalls-((.-hypervisor_call_table)/4)
-        .long SYMBOL_NAME(sys_ni_syscall)
+        .long SYMBOL_NAME(do_ni_syscall)
         .endr
index 42d6b1f46f4a41ef02fbf92c44cfbca7e8a639fa..b113f2c8123ff23ca2d24667686fccf5153b5393 100644 (file)
@@ -266,6 +266,10 @@ void cmain(unsigned long magic, multiboot_info_t *mbi)
 }
 
 
+/*********************************
+ * Various console code follows...
+ */
+
 /* VGA text (mode 3) definitions. */
 #define COLUMNS            80
 #define LINES      25
@@ -458,41 +462,6 @@ void printf(const char *fmt, ...)
 }
 
 
-void panic(const char *fmt, ...)
-{
-    va_list args;
-    char buf[128];
-    unsigned long flags;
-    extern void machine_restart(char *);
-    
-    va_start(args, fmt);
-    (void)vsnprintf(buf, sizeof(buf), fmt, args);
-    va_end(args);
-    
-    /* Spit out multiline message in one go. */
-    spin_lock_irqsave(&console_lock, flags);
-    __putstr("\n****************************************\n");
-    __putstr(buf);
-    __putstr("Aieee! CPU");
-    sprintf(buf, "%d", smp_processor_id());
-    __putstr(buf);
-    __putstr(" is toast...\n");
-    __putstr("****************************************\n\n");
-    __putstr("Reboot in five seconds...\n");
-    spin_unlock_irqrestore(&console_lock, flags);
-
-    mdelay(5000);
-    machine_restart(0);
-}
-
-
-/* No-op syscall. */
-asmlinkage long sys_ni_syscall(void)
-{
-    return -ENOSYS;
-}
-
-
 unsigned short compute_cksum(unsigned short *buf, int count)
 {
     unsigned long sum = 0;
@@ -625,6 +594,38 @@ long do_console_write(char *str, unsigned int count)
 }
 
 
+/*********************************
+ * Debugging/tracing/error-report.
+ */
+
+void panic(const char *fmt, ...)
+{
+    va_list args;
+    char buf[128];
+    unsigned long flags;
+    extern void machine_restart(char *);
+    
+    va_start(args, fmt);
+    (void)vsnprintf(buf, sizeof(buf), fmt, args);
+    va_end(args);
+    
+    /* Spit out multiline message in one go. */
+    spin_lock_irqsave(&console_lock, flags);
+    __putstr("\n****************************************\n");
+    __putstr(buf);
+    __putstr("Aieee! CPU");
+    sprintf(buf, "%d", smp_processor_id());
+    __putstr(buf);
+    __putstr(" is toast...\n");
+    __putstr("****************************************\n\n");
+    __putstr("Reboot in five seconds...\n");
+    spin_unlock_irqrestore(&console_lock, flags);
+
+    mdelay(5000);
+    machine_restart(0);
+}
+
+
 void __out_of_line_bug(int line)
 {
     printk("kernel BUG in header file at line %d\n", line);
@@ -633,6 +634,24 @@ void __out_of_line_bug(int line)
 }
 
 
+/*********************************
+ * Simple syscalls.
+ */
+
+long do_xen_version(int cmd)
+{
+    if ( cmd != 0 )
+        return -ENOSYS;
+    return (XEN_VERSION<<16) | (XEN_SUBVERSION);
+}
+
+long do_ni_syscall(void)
+{
+    /* No-op syscall. */
+    return -ENOSYS;
+}
+
+
 /*
  * GRAVEYARD
  */
index e9b9ce49ed2b600c038d0fada19baa44bce3223a..9ee56c04d02f2bb3b48795c17e996747aae16b25 100644 (file)
 #define __HYPERVISOR_net_io_op             6
 #define __HYPERVISOR_fpu_taskswitch        7
 #define __HYPERVISOR_sched_op              8
-#define __HYPERVISOR_set_dom_timer         9
-#define __HYPERVISOR_dom0_op              10
-#define __HYPERVISOR_network_op           11
-#define __HYPERVISOR_block_io_op          12
-#define __HYPERVISOR_set_debugreg         13
-#define __HYPERVISOR_get_debugreg         14
-#define __HYPERVISOR_update_descriptor    15
-#define __HYPERVISOR_set_fast_trap        16
-#define __HYPERVISOR_dom_mem_op           17
-#define __HYPERVISOR_multicall            18
-#define __HYPERVISOR_kbd_op               19
-#define __HYPERVISOR_update_va_mapping    20
+#define __HYPERVISOR_dom0_op               9
+#define __HYPERVISOR_network_op           10
+#define __HYPERVISOR_block_io_op          11
+#define __HYPERVISOR_set_debugreg         12
+#define __HYPERVISOR_get_debugreg         13
+#define __HYPERVISOR_update_descriptor    14
+#define __HYPERVISOR_set_fast_trap        15
+#define __HYPERVISOR_dom_mem_op           16
+#define __HYPERVISOR_multicall            17
+#define __HYPERVISOR_kbd_op               18
+#define __HYPERVISOR_update_va_mapping    19
+#define __HYPERVISOR_set_timer_op         20
 #define __HYPERVISOR_event_channel_op     21
+#define __HYPERVISOR_xen_version          22
 
 /* And the trap vector is... */
 #define TRAP_INSTR "int $0x82"
index 0e0542236a1c1c85e00111c7239f0179d9704033..cb64f1fdb410733f684508b7caf116ebec12a371 100644 (file)
@@ -532,7 +532,7 @@ int set_timeout_timer(void)
         alarm = __jiffies_to_st(timer->expires);
 
     /* Failure is pretty bad, but we'd best soldier on. */
-    if ( HYPERVISOR_set_dom_timer(alarm) != 0 )
+    if ( HYPERVISOR_set_timer_op(alarm) != 0 )
         ret = -1;
     
     spin_unlock(&timerlist_lock);
index 18dbe86ec1be07dec3160d3b9b07f8b6e9e39c77..e3cb2e0ac74ad43d21f5bfeed3b49db0c57e2166 100644 (file)
@@ -294,14 +294,14 @@ static inline int HYPERVISOR_stop(unsigned long srec)
     return ret;
 }
 
-static inline long HYPERVISOR_set_dom_timer(u64 timeout)
+static inline long HYPERVISOR_set_timer_op(u64 timeout)
 {
     int ret;
     unsigned long timeout_hi = (unsigned long)(timeout>>32);
     unsigned long timeout_lo = (unsigned long)timeout;
     __asm__ __volatile__ (
         TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_dom_timer),
+        : "=a" (ret) : "0" (__HYPERVISOR_set_timer_op),
         "b" (timeout_hi), "c" (timeout_lo) : "memory" );
 
     return ret;
@@ -435,4 +435,15 @@ static inline int HYPERVISOR_update_va_mapping(
     return ret;
 }
 
+static inline int HYPERVISOR_xen_version(int cmd)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_xen_version), 
+        "b" (cmd) : "memory" );
+
+    return ret;
+}
+
 #endif /* __HYPERVISOR_H__ */